import { Widget, _decorator, Node, tween, math, Toggle } from 'cc';
import { UIBase } from '../scriptBase/UIBase';
import { CoinItem } from '../uiItem/CoinItem';
import { CoinMgr } from '../manager/CoinMgr';
import { Global } from '../Global';
import { UI } from '../enum/UI';
import { CfgLuckySpin } from '../config/CfgLuckySpin';
import { InputBlock } from '../misc/InputBlock';
import { DtoReward } from '../dto/DtoReward';
import { AudioMgr } from '../manager/AudioMgr';
const { ccclass, property, requireComponent } = _decorator;

@ccclass('UI/UILuckySpin')
@requireComponent(Widget)
export class UILuckySpin extends UIBase {

    private coinItem: CoinItem = null
    private zhuanPan: Node = null
    private lights: Toggle = null

    private orgAngle: number = 0

    protected onLoad(): void {
        this.coinItem = this.findComp('CoinItem', CoinItem)
        this.zhuanPan = this.findNode('ZhuanPan')
        this.lights = this.findComp('Lights', Toggle)
    }

    public onOpen(data?: any): void {
        this.coinItem.init(CoinMgr.CurCoin)
        this.orgAngle = this.zhuanPan.angle
    }

    public onClose(data?: any): void {

    }

    private spin(): void {
        AudioMgr.playSfx('抽奖转盘')

        this.orgAngle = this.zhuanPan.angle

        const targetAngle: number = this.orgAngle - (720 + 60 * math.randomRangeInt(0, 6))

        const idx: number = (6 + (targetAngle % 360) / 60) % 6
        const data = CfgLuckySpin[idx]
        if (!data) {
            return
        }

        this.scheduleOnce(() => {
            const reward: DtoReward = {
                itemId: data.itemId,
                cnt: data.cnt
            }
            this.open(UI.GetReward, [reward])
        }, 3)

        InputBlock.setActive(3)

        tween(this.zhuanPan).to(3, { angle: targetAngle }, { easing: 'sineInOut' }).start()
        this.schedule(() => {
            this.lights.isChecked = !this.lights.isChecked
        }, 0.25, 10)
    }

    protected onBtnSpinClick(): void {
        if (CoinMgr.CurCoin < Global.Lucky_Spin_Coin_Cost) {
            this.open(UI.Toast, '星星币不足')
            return
        }
        CoinMgr.CurCoin -= Global.Lucky_Spin_Coin_Cost
        this.coinItem.updateCoin(CoinMgr.CurCoin, false)
        this.spin()
    }

}


